/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var subarraySum = function (nums, k) {
  //前缀和
  let preSum = 0
  //出现次数
  let count = 0
  //定义哈希表：前缀和 出现次数
  let map = new Map()
  map.set(0, 1)//前缀和为0的出现1次

  for (let num of nums) {
    //当前前缀和
    preSum += num

    //如果哈希表存在preSum-k：说明存在一个连续子数组，连续子数组的元素和为k
    if (map.has(preSum - k)) {
      //统计出现次数
      count += map.get(preSum - k)
    }

    //将当前前缀和存入哈希表
    map.set(preSum, (map.get(preSum) || 0) + 1)
  }

  //返回出现次数
  return count
};